package br.com.appclassificados.controler;

import java.util.Date;
import java.util.Map;

import javax.faces.context.FacesContext;  
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.ExternalContext;

import org.primefaces.context.RequestContext;

import br.com.appclassificados.dao.AnuncioDao;
import br.com.appclassificados.dao.CatMarcaDao;
import br.com.appclassificados.dao.CategoriaDao;
import br.com.appclassificados.dao.MarcaDao;
import br.com.appclassificados.dao.PessoaDao;
import br.com.appclassificados.dao.SubCategoriaDao;
import br.com.appclassificados.dao.TipoAnuncioDao;
import br.com.appclassificados.model.Anuncio;
import br.com.appclassificados.model.CatMarca;
import br.com.appclassificados.model.Categoria;
import br.com.appclassificados.model.Marca;
import br.com.appclassificados.model.Pessoa;
import br.com.appclassificados.model.SubCategoria;
import br.com.appclassificados.model.TipoAnuncio;

@ManagedBean(name="anuncioBean")
@SessionScoped
public class AnuncioBean{
	
	//ATRIBUTOS
	private Pessoa pessoa;
	private Anuncio anuncio;
	private Categoria categoria;
	private SubCategoria subCategoria;
	private Marca marca;
	private TipoAnuncio tipoAnuncio;
	

	//CONSTRUTORES
	public AnuncioBean(){
		super();
		this.anuncio = new Anuncio();
	}
	
	
	//METODOS
	public String cadastrar() throws Exception{
		
		FacesMessage msg;  
		
		//Pegar Pessoa
		LoginBean logBean =  (LoginBean) getSessionAttribute("loginBean");
		if(logBean != null && logBean.getEmail() != null){
			int id = logBean.getId();
			this.pessoa = new PessoaDao().search(id);
		}else{
			msg = new FacesMessage(FacesMessage.SEVERITY_WARN,"Login...", "Realize o Login.");
			FacesContext.getCurrentInstance().addMessage(null, msg);  
			return "/cadAnuncio.jsf";
		}
		
		//Pegar Categoria
		CategoriaBean catBean =  (CategoriaBean) getSessionAttribute("categoriaBean");
		this.categoria = new CategoriaDao().search(catBean.getCategoria().getNome());
		
		//Pegar SubCategoria
		SubCategoriaBean subBean =  (SubCategoriaBean) getSessionAttribute("subCategoriaBean");
		this.subCategoria = new SubCategoriaDao().search(subBean.getSubCategoria().getNome());
		
		//Pegar Marca
		MarcaBean marBean =  (MarcaBean) getSessionAttribute("marcaBean");
		this.marca = new MarcaDao().search(marBean.getMarca().getNome());
		
		//Pegar CatMarca
		CatMarca catMar = new CatMarcaDao().search(this.marca.getMarcaId(), this.subCategoria.getSubCategoriaId());
		
		//Pegar Marca
		TipoAnuncioBean tipBean =  (TipoAnuncioBean) getSessionAttribute("tipoAnuncioBean");
		this.tipoAnuncio = new TipoAnuncioDao().search(tipBean.getTipoAnuncio().getDescricao());
		
		//GRAVAR
		this.anuncio.setPessoaId(this.pessoa.getId());
		this.anuncio.setCatMarcaId(catMar.getCat_marcaId());
		this.anuncio.setTipoAnuncioId(this.tipoAnuncio.getTipoAnuncioId());		
		this.anuncio.setData(new Date());
		this.anuncio.setStatus(1);
		
		AnuncioDao dao = new AnuncioDao();
		if(dao.insert(this.anuncio)){
			msg = new FacesMessage(FacesMessage.SEVERITY_INFO,"Sucesso...", "Cadastrado com Exito...");
		}else{
			msg = new FacesMessage(FacesMessage.SEVERITY_ERROR,"Error.", "Falha ao cadastrar...");
		}
		
		msg = new FacesMessage(FacesMessage.SEVERITY_INFO,"Sucesso...", "Cadastrado com Exito...");
		FacesContext.getCurrentInstance().addMessage(null, msg); 
		
		return "index.jsf";
		
	}
	
	public void showMessage() {  
		
        FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "What we do in life", "Erro ao Cadastrar!");  
         
        RequestContext.getCurrentInstance().openDialog("index");  
        RequestContext.getCurrentInstance().execute("cadAnuncio.xhtml");
        //RequestContext.getCurrentInstance().showMessageInDialog(message);  
    }
	 
	
	/*Object o = getSessionAttribute("loginBean");
		LoginBean pdt = (LoginBean) o;
		
		System.out.println(pdt.getUsername());*/
	
	public static Object getSessionAttribute(String attributeName) {  
		try {  
		    ExternalContext ec = getExternalContext();  
		    if (ec != null){  
		        Map attrMap = ec.getSessionMap();     
		        if (attrMap != null) {  
		            return attrMap.get(attributeName);  
		        } else {  
		            return null;  
		        }  
		    } else {  
		        return null;  
		    }  
		} catch (Exception e) {  
		    e.printStackTrace();  
		    return null;  
		}  
	}  
	
	public static ExternalContext getExternalContext() {  
		try {  
		    FacesContext facesContext = FacesContext.getCurrentInstance();  
		    if (facesContext == null) {  
		        return null;  
		    } else {  
		        return facesContext.getExternalContext();  
		    }  
		} catch (Exception e) {  
		    e.printStackTrace();  
		    return null;  
		}      
	}  
	
	//GETTERS
	public Anuncio getAnuncio() {
		return anuncio;
	}

	public Categoria getCategoria() {
		return categoria;
	}


	//SETTERS
	public void setAnuncio(Anuncio anuncio) {
		this.anuncio = anuncio;
	}
	
	public void setCategoria(Categoria categoria) {
		this.categoria = categoria;
	}

}
